import functools
import generator
import time


def calcTime(func):
    '''
    函数修饰器, 用来计算各个排序算法的执行时间
    最终返回一个 list [temp, time_sum]
    '''

    def warpper(*args, **kwds):
        time_start = time.perf_counter()
        temp = func(*args, **kwds)
        time_end = time.perf_counter()
        time_sum = time_end - time_start
        return [temp, time_sum * 1000]

    return warpper


class MaxNum:
    def __init__(self , list0):
        self.num = list0

    @calcTime
    def getMaxNum(self):
        strs = map(str, self.num)
        #自定义比较函数，确定排序规则
        def cmp(a, b):
            if a + b == b + a:
                return 0
            elif a + b > b + a:
                return 1
            else:
                return -1
        #在sorted函数中，按照指定的 排序规则 ，对给定数组进行排序，降序
        strs = sorted(strs, key=functools.cmp_to_key(cmp), reverse=True)
        return ''.join(strs) if strs[0] != '0' else '0' #对型如 '0000'的字符串进行简化

if __name__ == "__main__":
    test0 = MaxNum([3,5,16,47])
    print(test0.getMaxNum())